package com.wxy.ej.flow.modules.taskflow.controller;

import com.alibaba.fastjson.JSONObject;
import com.rt.easyjava.common.base.Result;
import com.rt.easyjava.common.utils.others.StringUtils;
import com.wxy.ej.flow.modules.taskflow.service.TaskflowBizService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.Iterator;
import java.util.Map;

/**
* 前端控制器
* 1，自定义代码：源码生成器，创建模板，第一次生成源码时，会自动创建此类，之后生成源码时，此类将不做修改处理；
*    所以，程序员应该在这个类里写自己的代码，后续需求变更，自动生成源码时，不影响此类。
* 2，用户信息可直接形参获取：String (_userId，_loginName，_userName，_companyId，_userJson) or userDetailsDto.getUserId()
* @author wuxiaoyong
* @since 2022-01-29
*/
@Slf4j
@Api(tags = "DynamicTaskflowController -  控制类")
@RequestMapping("/coding/dynamicTaskflow")
@Controller
public class DynamicTaskflowController {
    @Autowired
    protected TaskflowBizService taskflowBizService;

    @ApiOperation("调用执行任务")
    @PostMapping(value = "/executeTask")
    @ResponseBody
    public Result executeTask(@RequestBody Map<String, Object> dataMap, String userDetailsJson, String shareLinkExpandData){
        Long taskFlowId = 0L;
        try {
            taskFlowId = Long.parseLong(dataMap.get("taskFlowId").toString());
        }catch (Exception e){
            return Result.builder().fault("任务ID不符合要求");
        }

        // 分享链接token里解出来的扩展数据
        if (!StringUtils.isNull(shareLinkExpandData)) {
            JSONObject expandJo = JSONObject.parseObject(shareLinkExpandData);
            Iterator<String> it = expandJo.keySet().iterator();
            while (it.hasNext()) {
                String key = it.next();
                Object value = expandJo.get(key);
                dataMap.put(key, value);
            }
        }

        // 流程设计页面启用模拟数据测试
        dataMap.remove("taskFlowId");
        if (dataMap.keySet().size()==0) {
            dataMap = null;
        }

        return taskflowBizService.executeTask(taskFlowId, dataMap);
    }


}
